package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Empleados;
import pojos.Tipoempleado;

/**
 *
 * @author Javier
 */
public class EmpleadosDAO {
    
    private Session sesion;//ESTABLECE UNA SESION CON LA BASE DE DATOS
    private Transaction transaccion;//EJECUTA LAS SENTENCIAS 
    
    
     private void iniciarConexionConBBDD()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        sesion=HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        transaccion=sesion.beginTransaction();//ARRANCA LA TRANSACCION
    }
    
    /**
     * ESTE METODO DEVUELVE TODOS LOS EMPLEADOS DE LA BASE DE DATOS 
     * @return List<Empleados>
     */
    public List<Empleados> getEmpleados()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        List<Empleados> listaEmpleados = null;
        
        iniciarConexionConBBDD();
        listaEmpleados=sesion.createQuery("FROM Empleados").list();
        sesion.close();
         
        return listaEmpleados;
    }
   
    public List<Empleados> buscaEmpleadosCodigo(int codEmpleado)
    {  
        List<Empleados> listaEmpleados = null;
        
        iniciarConexionConBBDD();
        listaEmpleados=sesion.createQuery("FROM Empleados WHERE codEmpleado="+codEmpleado).list();
        sesion.close();
        return listaEmpleados;
    }
    
    public List<Empleados> buscaEmpleadosTipo(Tipoempleado tipoempleado)
    {  
        List<Empleados> listaEmpleados = null;
        
        iniciarConexionConBBDD();
        listaEmpleados=sesion.createQuery("FROM Empleados WHERE tipoempleado="+tipoempleado).list();
        sesion.close();
        return listaEmpleados;
    }
    
    public List<Empleados> buscaEmpleadosDni(String dni)
    {  
        List<Empleados> listaEmpleados = null;
        
        iniciarConexionConBBDD();
        listaEmpleados=sesion.createQuery("FROM Empleados WHERE dni="+dni).list();
        sesion.close();
        return listaEmpleados;
    }
    
    public List<Empleados> buscaEmpleadosApellido(String apellido1)
    {  
        List<Empleados> listaEmpleados = null;
        
        iniciarConexionConBBDD();
        listaEmpleados=sesion.createQuery("FROM Empleados WHERE apellido1="+apellido1).list();
        sesion.close();
        return listaEmpleados;
    }

    public void addEmpleado(Empleados empleado)
    {
        iniciarConexionConBBDD();
        sesion.save(empleado);
        transaccion.commit();
        sesion.close();

    }
   
    public void eliminaEmpleado(Empleados empleado) throws HibernateException{ 
        try { 
            iniciarConexionConBBDD(); 
            sesion.delete(empleado); 
            transaccion.commit(); 
        } catch (HibernateException he) { 
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }
    
    public void actualizaEmpleado(Empleados empleado) throws HibernateException{ 
        try { 
            iniciarConexionConBBDD(); 
            sesion.update(empleado); 
            transaccion.commit(); 
        } catch (HibernateException he) {  
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }
    
}
